package com.library.books.domain.vo;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.library.common.annotation.Excel;
import com.library.common.core.serialize.DesensitizeSerialize;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * @Package: com.library.books.domain.vo
 * @ClassName: BorrowJoinBooksMultiInfo
 * @Author: Yin
 * @Date: 15:07
 * @Description: 借阅拼接书籍多信息
 */
@Data
public class BorrowJoinBooksMultiInfo {

    /** 编目id */
    @ApiModelProperty("编目id")
    private Long booksId;

    /** ISBN号 */
    @ApiModelProperty("ISBN号")
    private String booksIsbn;

    /** 书籍名称 */
    @ApiModelProperty("书籍名称")
    private String booksName;

    /** 书籍图书法类别 */
    @ApiModelProperty("书籍类别")
    private String booksType;

    /** 书籍编目中国图书分类-小类 */
    @ApiModelProperty("书籍类别")
    private String booksCnType;

    /** 书籍作者 */
    @ApiModelProperty("书籍作者")
    private String booksAuthor;

    /** 出版社 */
    @ApiModelProperty("出版社")
    private String booksPublisher;

    /** 内容简介 */
    @ApiModelProperty("内容简介")
    private String booksSynopsis;

    /** 封面图片 */
    @ApiModelProperty("封面图片")
    private String booksCoverPhoto;

    /** RFID号 */
    @ApiModelProperty("RFID号")
    private String booksCopyRfid;

    /** 副本状态 0：正常，1：借出，2：未上架*/
    @ApiModelProperty("副本状态")
    private String booksCopyStatus;

    /** 小类索书号 */
    @ApiModelProperty("小类索书号")
    private String booksCopyLicense;

    /** 副本借阅规则id */
    private Long booksRuleId;

    /** 规则名称 */
    @ApiModelProperty("规则名称")
    private String booksRuleName;

    /** 借阅限制天数 */
    @ApiModelProperty("借阅限制天数")
    private Long booksRuleTerm;

    /** 逾期滞纳金 */
    @ApiModelProperty("逾期滞纳金")
    private BigDecimal booksRuleTarryFine;

    /** 是否续借：0：是，1：否 */
    @ApiModelProperty("是否续借：0：是，1：否")
    private String booksRuleRenew;

    /** 续借次数 */
    @ApiModelProperty("续借次数")
    private Long booksRuleRenewNum;

    /** 续借限制天数 */
    @ApiModelProperty("续借限制天数")
    private Long booksRuleRenewTerm;

    /** 规则状态：0，正常，1：停用 */
    @ApiModelProperty("规则状态：0，正常，1：停用")
    private String booksRuleStatus;

    /** 学号卡号 */
    @ApiModelProperty("学号卡号")
    private String studentCardNumber;

    /** 学号 */
    @ApiModelProperty("学号")
    private String studentNumber;

    /** 学生姓名 */
    @ApiModelProperty("学生姓名")
    @JsonSerialize(using = DesensitizeSerialize.class)
    private String studentName;

    /** 学生专业 */
    @ApiModelProperty("学生专业")
    @Excel(name = "学生专业")
    private String studentClass;

    /** 书籍借阅记录列表 */
    private List<BorrowJoinBooksMultiInfoRecord> recordList;

    ///  一些处理

    /** 借阅人应该给的滞纳金 */
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private BigDecimal borrowTakeTarryFine;

    /** 借阅日期 */
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private Date startTime;
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private Date endTime;

    /**
     * 借阅记录
     *  - 借阅信息
     *  - 借阅信息操作（归还,续借）
     *  - 借阅滞纳金收取记录
     */
    @Data
    @JsonInclude(JsonInclude.Include.NON_NULL)
    public static class BorrowJoinBooksMultiInfoRecord {

        /** 借阅操作记录id */
        private Long borrowRecordId;

        /** 借阅记录操作类型 */
        private String borrowRecordType;

        /** 借阅记录操作人平台 */
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private String brOperateTerrace;

        /** 借阅记录操作人 */
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private String brCreateBy;

        /** 借阅记录创建时间 */
        @ApiModelProperty("创建时间")
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private Date createTime;


        /** 借阅id */
        private Long borrowId;

        /** 借阅天数 */
        @ApiModelProperty("借阅天数")
        private Integer borrowLendDays;

        /** 借阅时间 */
        @ApiModelProperty("借阅时间")
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private Date borrowLendTime;

        /** 续借次数 */
        @ApiModelProperty("续借次数")
        private Long borrowRenewNum  = 0L;

        /** 续借天数 */
        @ApiModelProperty("续借天数")
        private String borrowRenewDays;

        /** 续借时间 */
        @ApiModelProperty("续借时间")
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private Date borrowRenewTime;

        /** 归还时间 */
        @ApiModelProperty("归还时间")
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private Date borrowReturnTime;

        /** 应还时间 */
        @ApiModelProperty("应还时间")
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private Date borrowShouldReturnTime;

        /** 借阅状态：0：正常，1：逾期 */
        @ApiModelProperty("借阅状态")
        private String borrowStatus;

        /** 记录时的滞纳收取金额 */
        @ApiModelProperty("滞纳金额")
        private BigDecimal borrowFineAmount;

        /** 应还日期 */
        @ApiModelProperty("应还日期")
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private Date borrowFineShouldReturnTime;

        /** 记录时的逾期天数 */
        @ApiModelProperty("逾期天数")
        private Long borrowFineOverdueDays;

    }

}
